package com.owc.dao;

import com.owc.domain.dto.OrderDetailDTO;
import com.owc.domain.entity.Order;

import java.math.BigDecimal;
import java.util.List;

import com.owc.domain.vo.admin.WealthQueryVo;
import org.apache.ibatis.annotations.Param;

public interface OrderMapper extends BaseMapper<Order, Long> {

    /**
     * 获取用户订单列表
     *
     * @param userId 用户ID
     * @return 订单
     */
    List<Order> selectByUserId(@Param("userId") Long userId);

    /**
     * 获取用户总收益
     *
     * @param userId 用户ID
     * @return 总收益
     */
    BigDecimal selectUserTotalIncome(@Param("userId") Long userId);

    /**
     * 获取订单详细信息
     *
     * @param id     订单主键ID
     * @param userId 用户ID
     * @return 详细信息
     */
    OrderDetailDTO selectOrderDetailById(@Param("id") Long id, @Param("userId") Long userId);

    /**
     * 根据产品ID获取订单列表
     *
     * @param productId 产品ID
     * @return 订单列表
     */
    List<Order> selectOrdersByProductId(@Param("productId") Long productId);

    /**
     * 统计购买产品的总订单金额
     *
     * @param productId 产品ID
     */
    BigDecimal statisticsAmount(@Param("productId") Long productId);

    /**
     * 获取满足条件的所有订单
     *
     * @param wealthQueryVo 查询参数
     */
    List<Order> selectAllByFilter(@Param("queryModel") WealthQueryVo wealthQueryVo);

    /**
     * @param orderId 订单ID
     * @param userId  用户ID
     * @return 订单
     */
    Order selectByOrderId(@Param("orderId") Long orderId, @Param("userId") Long userId);

    /**
     * 修改订单状态
     *
     * @param type    状态码
     * @param orderId 订单ID
     * @param userId  用户ID
     * @param redeemTime  赎回时间
     */
    void updateStatusByOrderId(@Param("type") Integer type, @Param("orderId") Long orderId, @Param("userId") Long userId, @Param("redeemTime") String redeemTime);

    /**
     * 根据type获取订单列表
     *
     * @param status 订单状态
     * @return
     */
    List<Order> selectByStatus(Integer status);
}